package cn.ffcs.base.service;

import java.util.Date;
import java.util.List;

import org.hibernate.criterion.Criterion;

import cn.ffcs.base.model.BaseEntity;
import cn.ffcs.base.web.PageControl;
import cn.ffcs.util.ext.Expression;

/**
 * 
 * 业务逻辑控制层基本代码<br/> 
 * <table>
 * <tr>
 * <td>负责人/principal: </td>
 * <td colspan="2">liuzhh</td>
 * <tr>
 * <td>修改记录/revision:</td>
 * <td colspan="2"></td>
 * </tr>
 * <tr>
 * <td>日期:</td>
 * <td>修改人:</td>
 * <td>修改说明:</td>
 * </tr>
 * <tr>
 * <td></td>
 * <td></td>
 * <td></td>
 * </tr>
 * </table>
 * @author liuzhh
 * @version $Id$
 */
public interface IBaseService<B extends BaseEntity>
{
    /**
     * 新增或修改操作
     * @param baseEntity
     */
    public abstract void saveOrUpdate(B baseEntity);
    
    /**
     * 
     * 保存操作
     * @param baseEntity
     */
    public void save(B baseEntity);
    /**
     * 
     * @param baseEntity
     */
    public void merge(B baseEntity);
    /**
     * 
     * 更新操作
     * @param baseEntity
     */
    public void update(B baseEntity);
    
    /**
     * 删除操作
     * @param baseEntity
     */
    public abstract void remove(B baseEntity);
    
    /**
     * 根据id得到业务实体
     * @param id
     * @return
     */
    public abstract B findById(Integer id);
    
    /**
     * 获取所有关联实体
     * @return
     */
    public abstract List<B> findAll();
    
    /**
     * 
     * 取一定数据
     * @param num
     * @return
     */
    public List<B> findAll(int num,final String orderParam);
    
    /**
     * 
     * 初始化业务数据
     * @return
     */
    public abstract void init();

    /**
     * 按查询条件获取总数
     * @return
     */
    public List<B> findBy(Criterion cond);
    
    /**
     * 
     * 按查询条件获取总数并按照排序字段进行排序
     * @return
     */
    @SuppressWarnings("unchecked")
    public List<B> findByAndOrder(Criterion cond,String orderParam,String strOrder);
    
    /**
     * 获取所有同类实体数据并实现翻页
     * @param currPage
     * @param pageSize
     * @return
     */
    public PageControl findAllByPage(int currPage, int pageSize);
    
    /**
     * 批量删除
     * @param ids
     */
    public void batchDel(String[] ids);
    
    /**
     * 批量删除
     * @param ids
     */
    public void deleteBy(Object entity, String param, String paramValue);
    
    /**
     * 得到分页数据
     * @return
     */
    public PageControl findByPage(Criterion cond,int currPage, int pageSize);
    public PageControl findByPage(Expression exp,int currPage, int pageSize);
    /**
     * 
     * 得到数据库当前时间
     * @return
     */
    public Date getCurrSysdate();
    /**
     * 获取数据库中seq的nextval
     * @param sequenceName
     * @return
     */
    public String getNextval(String seqName);
}
